#include <iostream>
#include <string>

using namespace std;
//======================================基类和派生类的定义====================================================
//定义一个Person基类
// class Person{
// public:
//     void print(){
//         cout << "Name: " << _name << ", Age: " << _age << endl;
//     }
    
// protected:
//     string _name;
//     int _age;
// };

// class Student : public Person {
// public:
//     void set_age(int age){
//         _age = age;
//     }

//     void get_age(){
//         cout << "Age: " << _age << endl;
//     }

//     void set_name(string name){
//         _name = name;
//     }

//     void get_name(){
//         cout << "Name: " << _name << endl;
//     }
// protected:
//     string _stuID;
// };

// class Teacher : public Person {
// protected:
//     string _teacherID;
// };


//==========================================基类和派生类的继承================================================
//基类
// class A {
// public:
//     A(){
//         cout << "A's constructor called." << endl;
//     }
//     ~A(){
//         cout << "A's destructor called." << endl;
//     }
//     A(int a, int b): x(a), z(b){
//         cout << "A's param constructor called." << endl;
//     }
//     // void set_x(int x){
//     //     this -> x = x;
//     // }
//     // int get_x(){
//     //     return x;
//     // }
// protected:
//     int z;
// private:
//     int x;
// };

// class B : public A {
// public:
//     B(){
//         cout << "B's constructor called." << endl;
//     }
//     B(int a, int b):A(a , b){
//         // z = a;
//         // set_x(b);
//         cout << "B's param constructor called." <<endl;
//     }
//     ~B(){
//         cout << "B's destructor called." << endl; 
//     }
//     int get_z(){
//         return z;
//     }
// };

//===========================================基类与派生类中的成员变量名冲突============================================================

// class A {
//     public:
//         int a_x;
//         int a_y;
//         A() : a_x(10),a_y(10){

//         }
    
// };

// class B : public A {
//     public:
//         int b_x;
//         int a_y;//和基类中成员变量名冲突
//         B() : b_x(20) , a_y(20){

//         }


// };

//=====================================================================隐藏============================================================================

// class A{
//     public:
//         void func(){
//             cout << "A::func" << endl;
//         }
// };

// class B : public A {
//     public:
//         void func(){
//             cout << "B::func" << endl;
//         }
//         void func2(){
//             cout << "B::func2" << endl;
//         }
//         void func(int x){
//             cout << "B::func(int x)" << endl;
//         }
// };

//=========================================================多继承&环形继承===================================================================

// class A {
//     public:
//         int a_x;

// };

// class B : virtual public A {
//     public:
//         int b_x;
// };

// class C : virtual public A{
//     public:
//         int c_x;
// };

// class D : public B, public C {
//     public:
//         int d_x;
// };

// class B {
//     public:
//         int b_x;
// };

// class C : public A, public B {
//     public:
//         int c_x;
// };

//==================================================静态成员变量与函数的继承=======================================================================

class A {
    public:
        static int a_x;//静态成员变量的声明
        static void func(){
            cout << "A::func" << endl;
        }
};
int A::a_x = 0; // 静态成员变量的定义

class B : public A {
    public:
        static int a_x;
        static void func(){
            cout << "B::func" << endl;
        }
};
int B::a_x = 1000; // 静态成员变量的定义sangshi sik

int main(){
//     A a1,a2; // 创建A类的对象
//     A::a_x = 42;
//     a1.func(); // 调用静态成员函数
//     cout << "A's a_x: " << A::a_x << endl; //
//     B b;
//     b.a_x = 100; // 访问静态成员变量
//     cout << "B's a_x: " << b.a_x << endl; // 输出
//     cout << "A's a_x: " << A::a_x << endl; // 输出
// }
    cout << B::a_x << endl; // 输出B类的静态成员变量
}